<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Compilador de Pascal :: PLg 2007-2008 </title>

<link href="style.css" rel="stylesheet" type="text/css" />
<!--[if IE 6]>
  <style>
  /*<![CDATA[*/
#sidebarbottom {background:url(images/sidebarbottom.jpg) no-repeat -3px;}
  /*]]>*/
  </style>
<![endif]-->
</head>

<body>
<div id="wrap">
<div id="topbar">
  
</div>
<div id="header">
<ul id="topmenu">
<li><a href="index.html">Inicio</a></li>
<li><a href="lexico.html">Léxico</a></li>
<li><a href="sintactico.html">Sintáctico</a></li>
<li class="active"><a href="tablaDeSimbolos.html">Tabla de símbolos</a></li>
<li><a href="gestorDeErrores.html">Gestor de errores</a></li>
<li><a href="casosDePrueba.html">Casos de Prueba</a></li>
</ul>
</div>
<div id="content">
<div id="mainpage">
<h2>La tabla de símbolos</h2>

<p>La tabla de s&iacute;mbolos es la entidad contenedora de informaci&oacute;n y datos del compilador. Para ello se requiere un acceso r&aacute;pido y &oacute;ptimo a los datos necesarios durante el proceso, y dada la optimalidad de los objetos predefinidos por Sun MicroSystems en su JDK 1.6 hemos decidido el uso de listas din&aacute;micas y tablas hash ofrecidas por el mismo.</p>
<p>El esquema que la tabla de s&iacute;mbolos posee es el ofrecido en clase en su tercera implementaci&oacute;n. La tabla, actualmente, maneja &aacute;mbitos y posee opciones de editabilidad.</p>
<p>NOTA: Cabe se&ntilde;alar que la gesti&oacute;n de palabras reservadas del lenguaje est&aacute; monitorizada e implementada dentro de una tabla perteneciente al m&oacute;dulo presentado.</p>
<p>La tabla de s&iacute;mbolos podr&iacute;a resumirse, en esquema, de la siguiente forma:</p>
<ul>
<li><b>Tabla de palabras reservadas </b>
	<p>Clave-String Valor-Tipo de palabra reservada.</p></li>
<li><b>Lista de tablas para cada &aacute;mbito </b>

<p>Para cada tabla se sigue el siguiente esquema: Clave-String Valor-Lista polim&oacute;rfica de atributos.</p>
<p>La clave ser&aacute;, en cada caso, el lexema particular de cada identificador y contendr&aacute; asociada la lista de todos sus atributos. Se ha elegido una lista polim&oacute;rfica general (<i>Object</i>) para generalizar en todo lo posible los contenidos de la misma y facilitar las posibles pr&oacute;ximas ediciones.</p>
</li>
<li><b>Tabla organizadora: Clave-Entero Valor-Entero. </b>

<p>Esta tabla asociar&aacute; cada &aacute;mbito con su "padre" a nivel de anidamiento seg&uacute;n la organizaci&oacute;n del c&oacute;digo.</p></li>
<li><b>Puntero a &aacute;mbito actual: Entero. </b>
<p>El puntero se&ntilde;alar&aacute; al &aacute;mbito en el cual se encuentre el an&aacute;lisis del c&oacute;digo en el momento actual.</p></li>
<li><b>Flag de inserciones toleradas: Booleano. </b>
<p>Este flag permitir&aacute;, seg&uacute;n su valor, insertar nuevas entradas en la tabla de s&iacute;mbolos. Su gesti&oacute;n, y edici&oacute;n, ser&aacute; supuestamente controlada por el Analizador Sint&aacute;ctico o Sem&aacute;ntico, seg&uacute;n se decida implementar.</p></li>

</ul>

<p>Los m&eacute;todos ofrecidos por la clase son los descritos en la documentaci&oacute;n Javadoc del proyecto. Como decisi&oacute;n de dise&ntilde;o hay que referir las siguientes cualidades:</p>

<ul>
<li><b>Palabras reservadas:</b> Si se intenta insertar un identificador cuyo lexema coincide con una palabra reservada se retornar&aacute; la referencia a la tabla de palabras reservadas en su entrada correspondiente.</li>
<li><b>Palabras ya declaradas:</b> Si se intenta insertar un identificador cuyo lexema ya ha sido declarado, ya sea en el &aacute;mbito actual o en cualquier &aacute;mbito de orden superior de anidamiento, se retornar&aacute; la referencia a dicha entrada, en el &aacute;mbito que corresponda.</li>
<li><b>Palabra nueva, escritura inhabilitada:</b> Si se intenta insertar un identificador cuyo lexema no coincide con ninguno insertado previamente pero no est&aacute; habilitado el flag de tolerar inserci&oacute;n se retornar&aacute; el valor null para que el analizador l&eacute;xico gestione el error de manera particular.</li>
<li><b>Palabra nueva, escritura habilitada:</b> Si no se cumple ninguna de las anteriores opciones, se generar&aacute; una nueva entrada en la tabla del &aacute;mbito actual y se retornar&aacute; la referencia a la misma.</li>
</ul>

<p>La tabla de s&iacute;mbolos est&aacute; orientada al uso m&aacute;ximo posible desde su inicio, as&iacute; que puede darse la situaci&oacute;n de tener que especificarla m&aacute;s detalladamente en alguna secci&oacute;n para su correcta funcionalidad seg&uacute;n avance el uso y necesidad de la misma.</p>


</div>

<div class="clear"></div>
</div>
<div id="footer">
Compilador de Pascal:: PLg 2007-2008</div>
<div id="credit"><a href="http://www.ramblingsoul.com">CSS Layout</a> by Rambling Soul</div></div>

</body>
</html>